<?php

namespace App\Containers\AppSection\File\Models;

use App\Containers\AppSection\Confirmation\Models\Confirmation;
use App\Containers\AppSection\Profile\Models\Profile;
use App\Containers\AppSection\Project\Models\Project;
use App\Containers\AppSection\Signature\Models\Signature;
use App\Containers\AppSection\Type\Models\Type;
use App\Containers\AppSection\User\Models\User;
use App\Ship\Parents\Models\Model;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Relations\BelongsTo;


/**
 * Файл
 *
 * @property int $id Id
 * @property int $user_id Владелец
 * @property int $profile_id Профиль
 * @property int $project_id Проект
 * @property int $signature_id Подпись
 * @property int $confirmation_id ПЭП
 * @property string $sign_type Тип подписи
 * @property string $name Название
 * @property string $path Путь
 * @property string $extension Расширение
 * @property int $size Размер
 * @property string $type Тип
 * @property Carbon $created_at Время создания
 * @property Carbon $updated_at Время обновления
 *
 * @property User $user Владелец
 * @property Profile $profile Профиль
 * @property Project $project Проект
 * @property Signature $signature Подпись
 * @property Confirmation $confirmation ПЭП
 * @property Type $sign Тип подписи
 */
class File extends Model
{
    protected $fillable = [
        'user_id',
        'signature_id',
        'confirmation_id',
        'sign_type',
        'profile_id',
        'project_id',
        'name',
        'path',
        'extension',
        'size',
        'type',
    ];

    protected $dates = [
        'created_at',
        'updated_at',
    ];

    /**
     * A resource key to be used in the serialized responses.
     */
    protected string $resourceKey = 'File';

    /**
     * Владелец
     * @return BelongsTo User
     */
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class, 'user_id', 'id')->withTrashed();
    }

    /**
     * Профиль
     * @return BelongsTo Profile
     */
    public function profile(): BelongsTo
    {
        return $this->belongsTo(Profile::class, 'profile_id', 'id');
    }

    /**
     * Проект
     * @return BelongsTo Project
     */
    public function project(): BelongsTo
    {
        return $this->belongsTo(Project::class, 'project_id', 'id');
    }

    /**
     * Подпись
     * @return BelongsTo Signature
     */
    public function signature(): BelongsTo
    {
        return $this->belongsTo(Signature::class, 'signature_id', 'id');
    }

    /**
     * ПЭП
     * @return BelongsTo Confirmation
     */
    public function confirmation(): BelongsTo
    {
        return $this->belongsTo(Confirmation::class, 'confirmation_id', 'id');
    }

    /**
     * Тип подписи
     * @return BelongsTo Type
     */
    public function sign(): BelongsTo
    {
        return $this->belongsTo(Type::class, 'sign_type', 'key');
    }
}
